Vamos estimar, a partir de uma amostra de opiniões, os parâmetros da população de usuários do site de filmes GroupLens.
movies = read_csv("../dados/movies.csv")
ratings = read_csv("../dados/ratings.csv")
genres = read_csv("../dados/movie-genre.csv")
genres = genres %>%
group_by(movieId, title) %>%
summarise(nGenre = n())
Ainda sobre o suscesso dos filmes de Resident Evil queremos saber o que esperar em termos de avaliação dos usuários do GroupLens. Quem são os usuários e como eles votam? Quais suas avaliações?
re_movies = movies %>%
filter(grepl("Resident Evil", title))
dados = merge(re_movies, ratings, by="movieId") %>%
subset(select = -c(movieId, title, genres, timestamp))
Antes de mais nada podemos nos perguntar: como se comporta a distribuição de avaliação de cada um dos usuários?
ggplotly(dados %>%
ggplot(aes(x=as.character(userId),
y=rating,
color=as.character(userId))) +
geom_jitter(width = .1) +
geom_boxplot() +
ggtitle("Distribuição da avaliação dos usuários") +
ylab("Avaliação") +
xlab("Usuário") +
theme(legend.position="none",
plot.title = element_text(hjust = 0.5)))
Os gráficos acima mostram vários valores calculados a partir do conjunto de avaliações de cada usuário. Os quadrados ou box’s representam a distância interquartil (representam 50% das avaliações de cada episódio). As retas que cortam cada box são os valores de avaliação mediana para cada episódio.
Podemos observar no gráfico acima algumas coisas curiosas. A pior avaliação de Resident Evil foi do usuário de id 165 (0.5). As outras duas piores notas foram dos usuários 15 e 475 (1). Apenas dois usuários, 346 e 78, deram as notas mais altas (5).
Em termos de mediana de avaliação podemos observar duas coisas importantes no que compete a comparação: os usuários que melhor avaliaram e os que pior avaliaram. Apenas o usuário de Id 78 melhor avaliou os filmes (4.75), e apenas o usuário 475 pior avaliou os filmes (2).
ggplotly(dados %>%
ggplot(aes(x=as.character(userId),
color=as.character(userId),
fill=as.character(userId))) +
geom_bar(width = .5) +
ggtitle("Distribuição da quantidade de avaliação dos usuários") +
scale_y_continuous(breaks = seq(1,3,1)) +
ylab("Quantidade") +
xlab("Usuário") +
theme(legend.position="none",
plot.title = element_text(hjust = 0.5)))
Em maioria os telespectadores votaram apenas uma vez e a quantidade máxima de avaliação observada é 3.
Qual seria a avaliação dos telespectadores de Resident Evil no site? Vamos estimar a mediana de avaliação populacional utilizando como métrica amostral a mediana de avaliação e a técnica de bootstrap.
A mediana é uma medida que não é afetada ou enviesada por valores extremos ou outliers isso irá deixar a análise mais justa. A técnica de bootstrap vai auxiliar no processo de re amostragem e cálculo do intervalo de confiança para a avaliação mediana. Iremos utilizar a 2000 replicações no processo de re amostragem e nível de confiança de 95%.
bootf <- function(x) {
b = bootstrap(x$rating, median, R = 2000)
m = CI.percentile(b, probs = c(.025, .975))
newstuff = rbind(m) %>%
data.frame()
return(newstuff)
}
dados.ci = dados %>%
do(bootf(.)) %>%
setNames(c("rating_lwr","rating_upr"))
dados.ci %>%
ggplot(aes(x = "Usuários",
ymin = rating_lwr,
ymax = rating_upr,
color=as.character("Usuários"))) +
geom_errorbar(width = .1) +
labs(x="Usuário", y="Mediana de avaliação") +
ggtitle("Intervalo de confiança da mediana de avaliação")+
theme(legend.position="none",
plot.title = element_text(hjust = 0.5))
Observando o gráfico acima podemos concluir com 95% de confiança que a mediana de avaliação populacional de telespectadores dos filmes de Resident Evil no site GroupLens está entre 2.5 e 3.5.
No tópico anterior estimamos a mediana de avaliação populacional dos telespectadores de Resident Evil e agora, de uma forma mais geral, vamos estimar a mediana de avaliação dos telespectadores de todos os filmes.
dados = ratings %>%
subset(select = -c(movieId,timestamp))
O conjunto de dados contém muitas avaliações para cada um dos usuários do GroupLens mas em que ordem de magnitude estão essas quantidades?
ggplotly(dados %>%
ggplot(aes(x=as.character(userId),
color=as.character(userId))) +
geom_bar() +
ggtitle("Distribuição da quantidade de avaliação dos usuários") +
ylab("Quantidade de avaliações") +
xlab("Usuário") +
theme(legend.position="none",
plot.title = element_text(hjust = 0.5)))
A ordem de magnitude varia muito e vão de centenas até a casa de milhar. Alguns usuários avaliaram menos de 500 vezes enquanto que outros avaliaram mais de 2000 vezes. A quantidade máxima de avaliações (2391) é observada pelo usuário de Id 547. Este usuário não está sozinho, há outros 4 usuários que tamém se destacam bastante em quantidade de avaliações.
Qual seria a avaliação dos telespectadores de todos os filmes do site? Vamos estimar a avaliação dos filmes utilizando a mediana de avaliação e a técnica de bootstrap.
A mediana é uma medida que não é afetada ou enviesada por valores extremos ou outliers isso irá deixar a análise mais justa. A técnica de bootstrap vai auxiliar no processo de re amostragem e cálculo do intervalo de confiança para a avaliação mediana. Iremos utilizar a 2000 replicações no processo de re amostragem e nível de confiança de 95%.
dados.ci = dados %>%
do(bootf(.)) %>%
setNames(c("rating_lwr","rating_upr"))
dados.ci %>%
ggplot(aes(x = "Usuários",
ymin = rating_lwr,
ymax = rating_upr,
color="Usuários")) +
geom_errorbar(width = .1) +
labs(x="Usuário", y="Mediana de avaliação") +
ggtitle("Intervalo de confiança da mediana de avaliação")+
theme(legend.position="none",
plot.title = element_text(hjust = 0.5))
Observando o gráfico acima podemos concluir com 95% de confiança que a mediana de avaliação populacional de telespectadores de todos os filmes do site GroupLens é 4.
Será que existe um gênero preferido dos telespectadores? Quais os gêneros mais bem avaliados dos filmes do GroupLens? Quais os gêneros e como eles são votados? Quais suas avaliações? Vamos estimar a mediana de avaliação populacional dos usuários do site GroupLens dos dois gêneros mais votados.
genres = read_csv("../dados/movie-genre.csv")
dados = merge(genres, ratings, by="movieId") %>%
subset(select = -c(movieId, title, userId, timestamp))
Inicialmente há algumas avaliações associadas a filmes que não contém gênero. Estas avaliações serão filtradas.
dados = dados %>% filter(genre != "(no genres listed)")
O conjunto de dados contém muitas avaliações para cada um dos gêneros dos filmes do GroupLens mas em que ordem de magnitude estão essas quantidades?
ggplotly(dados %>%
ggplot(aes(x=genre,
color=genre,
fill=genre)) +
geom_bar() +
ggtitle("Distribuição da quantidade de avaliação dos gêneros") +
ylab("Quantidade de avaliações") +
xlab("Gênero") +
theme(legend.position="none",
plot.title = element_text(hjust = 0.5)))
A ordem de magnitude varia muito na casa de milhar. Alguns gêneros foram avaliados menos de 10000 vezes enquanto que outros foram mais de 30000 vezes. A quantidade máxima de avaliações (43684) é observada pelo gênero de drama. Este gênero não está sozinho e é acompanhado por outros 3 gêneros que tamém se destacam bastante em quantidade de avaliações.
Observando agora apenas os gêneros de drama e comédia: como se comportam a distribuição de avaliações desses gêneros?
dados = dados %>%
filter(genre %in% c("Comedy", "Drama"))
ggplotly(dados %>%
ggplot(aes(x=genre,
y=rating,
color=genre)) +
geom_boxplot() +
ggtitle("Distribuição da avaliação dos gêneros") +
ylab("Avaliação") +
xlab("Gênero") +
theme(legend.position="none",
plot.title = element_text(hjust = 0.5)))
Observando o gráfico acima podemos observar que além de ser o gênero que contém mais avaliações, o gênero de drama é também o gênero que contém maior avaliação em termos de mediana (4).
Qual seria a avaliação dos telespectadores dos filmes de comédia e drama? Vamos estimar a avaliação dos gêneros utilizando a mediana de avaliação e a técnica de bootstrap.
A mediana é uma medida que não é afetada ou enviesada por valores extremos ou outliers, isso irá deixar a análise mais justa. A técnica de bootstrap vai auxiliar no processo de re amostragem e cálculo do intervalo de confiança para a avaliação mediana. Iremos utilizar a 2000 replicações no processo de re amostragem e nível de confiança de 95%.
dados.ci = dados %>%
group_by(genre) %>%
do(bootf(.)) %>%
setNames(c("genre","rating_lwr","rating_upr"))
Qual seria a expectativa de mediana de avaliação para cada um dos gêneros listados acima?
dados.ci %>%
ggplot(aes(x = genre,
ymin = rating_lwr,
ymax = rating_upr,
color= genre)) +
geom_errorbar(width = .1) +
labs(x="Gênero",
y="Mediana de avaliação") +
ggtitle("Intervalo de confiança da mediana de avaliação de cada gênero")+
theme(legend.position="none",
plot.title = element_text(hjust = 0.5))
Observando o gráfico acima podemos concluir com 95% de confiança que a mediana de avaliação populacional do gênero comédia dos telespectadores de todos os filmes do site GroupLens é 3.5 e que a mediana de avaliação para a mesma população do gênero drama é 4.